class SDK
{
    public static layaConfig:ILayaConfig;
    public static configInitCall:(cfg:any)=>void;  
    public static addCall:()=>void;          
    public static exitCall:(score:number, result:number, level:number)=>void;          
    public static container:Laya.Sprite;
    public static pixelRatio:number;
    public static readonly DEFAULT_WIDTH:number = 720;
    public static readonly DEFAULT_HEIGHT:number = 1280;
    /**初始化配置和基础数据
     * @param userInfo 参考IUserInfo结构
     * @param callback 完成回调，此处需要加载配置，为异步，所以必须从回调中确认初始化完成，返回参数cfg为关卡配置
    */
    public static init(userInfo:IUserInfo,callback:(cfg:any)=>void=null):void
    {
        new Main;
        Main.nickName = userInfo && userInfo.nickName?userInfo.nickName:"";
        SDK.configInitCall = callback;
    }    
    /**Laya环境初始化，请所有接口之前调用这个方法*/
    public static initLaya(cfg:ILayaConfig,callback:()=>void=null):void
    {
        if(SDK.layaConfig == null)
        {
            SDK.pixelRatio = cfg.pixelRatio?cfg.pixelRatio:Laya.Browser.pixelRatio;
            if(cfg.resetStage)
            {
                Laya.init(Laya.Browser.clientWidth * SDK.pixelRatio, Laya.Browser.clientHeight * SDK.pixelRatio, WebGL);
                Laya.stage.scaleMode = Laya.Stage.SCALE_FIXED_AUTO;
            }            
            SDK.layaConfig = cfg;
            GameManager.DESIGN_WIDTH = cfg.stageWidth?cfg.stageWidth:SDK.DEFAULT_WIDTH;
            GameManager.DESIGN_HEIGHT = cfg.stageHeight?cfg.stageHeight:SDK.DEFAULT_HEIGHT;        
            GameManager.MIN_RATIO = cfg.minRatio?cfg.minRatio:NaN;
            GameManager.MAX_RATIO = cfg.maxRatio?cfg.maxRatio:0.75;
            GameManager.SCALE_MODE = cfg.scaleMode;
            if(cfg.showStatus)
                Laya.Stat.show(0,0);     
            
        }        
        callback && callback();
    }
    /**外部主动调,添加到舞台回调*/
    public static onAdd(container:Laya.Sprite, callback:()=>void=null):void
    {    
        SDK.container =  container?container:Laya.stage;            
        if(GameManager.game && GameManager.game.curModule)
        {            
            GameManager.game.addToContainer(SDK.container);
            callback();
        }
        else
        {
            SDK.addCall = callback;
        }
    }
    /**外部主动调,从舞台移除回调*/
    public static onRemove(callback:()=>void=null):void
    {
        if(GameManager.game && GameManager.game.curModule)
        {
            ghost.LoadUI.hide();
            GameManager.game.curModule.hide();
            if(callback)
                callback();
        }               
    }
    /**外部主动调,销毁所有资源*/
    public static onDestroy(callback:()=>void=null):void
    {
        Main.instance.dispose();
        callback && callback();
    }

    /**跳转关卡
     * @param 关卡数，默认1，总关卡数看外部配置，或者在init配置初始化的返回json中查看 
    */
    public static jump(lv:number):void
    {
        Main.instance.jump(lv);
    }

    /**监听退出通知
     * @param callback 返回得分参数
     * @param result 结果 1 成功 0 失败
    */
    public static listenExitCall(callback:(score:number, result:number, level:number)=>void):void
    {
        SDK.exitCall = callback;        
    }

}
interface IUserInfo
{
    /**用户昵称*/nickName:string;
}
interface ILayaConfig
{    
    /**舞台宽度设计尺寸*/stageWidth?:number;
    /**舞台高度设计尺寸*/stageHeight?:number; 
    /**像素精度比例*/pixelRatio?:number;
    /**最小宽高比，默认NaN,不限制*/minRatio?:number;
    /**最大宽高比，默认NaN，不限制*/maxRatio?:number;
    /**是否显示帧率*/showStatus?:boolean; 
    /**舞台适配类型参考Laya的适配常量，不填默认根据屏幕大小自动选择
     * 横板或者正方形屏幕使用showall，长方形使用noborder
    */
    scaleMode?:string;
    /**是否重置舞台适配参数*/resetStage?:boolean;
}